//
//  SFMovableTableViewController.h
//  TableViewFramework
//
//  Created by 支晓辉 on 16/3/25.
//  Copyright © 2016年 wishselfly. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "SFMovableTableViewCell.h"

/**
 *  可移动行的列表视图
 */
@interface SFMovableTableViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>

@property (nonatomic, readonly) UITableView *tableView;
/** 在移动结束之后重新载入视图数据 */
@property (assign, nonatomic) BOOL reloadDataWhenEndMove;
/** 是否正在滚动 */
@property (nonatomic, readonly) BOOL isAutoScrolling;

/**
 *  获取某个位置的cell
 *
 */
- (SFMovableTableViewCell*)cellFromIndexPath:(NSIndexPath*)indexPath;

/**
 *  将要移动某一行到另一个位置
 *
 *  @param srcIndexPath  开始移动的位置
 *  @param destIndexPath 移动到的目标位置
 */
- (void)moveRowFromIndexPath:(NSIndexPath*)srcIndexPath toIndexPath:(NSIndexPath*)destIndexPath;

/**
 *  是否能移动该数据
 *
 *  @param srcPath  从哪里开始
 *  @param destPath 从哪里结束
 *
 */
- (BOOL)canMoveIndexPathFrom:(NSIndexPath*)srcPath toIndexPath:(NSIndexPath*)destPath;

#pragma mark Intersect cell

/**
 *  获取当前矩形与tableView里面相交的Cell
 *
 *  @param globalRect 进行碰撞测试的目标矩形(必须是基于KeyWindow的位置)
 *
 */
- (SFMovableTableViewCell*)intersetCellWithRect:(CGRect)globalRect;

#pragma mark - AutoScroll

/**
 *  自动滚动，滑动到底部或者顶部的时候自动停止
 *
 *  @param isDown 是否向下，否则向上
 */
- (void)tryToAutoScroll:(BOOL)isDown;

/**
 *  如果存在未被释放的自动滚动计时器，则自动释放
 */
- (void)stopAutoScrollTimerIfNeed;

/**
 *  当前视图被触发自动滚动的时候(该方法默认什么都不做)
 */
- (void)movableTableViewDidAutoScroll;

@end
